package com.briup.day04;

/**
 * 方法的介绍
 */
public class MethodClass {
    public static void main(String[] args) {
        /*
            方法：就是定义在java程序中，某一类问题的具体解决方案，
            这个解决方案可以是有jdk提供，也可以是自定义提供；提供方法的目的
            在于后续遇到相似问题时，可以直接使用对应的方法解决这些问题，
            而无需重复的编写类似的代码，降低程序代码的冗余
         */
        // 在A类中需要输出50次hello world，在B类中也需要输出300次hello world
        // 输出100次hello world
        /*for (int i = 0; i < 100; i++) {
            System.out.println("hello world");
        }*/
        // 调用方法，能够实现上述功能
        printHello(300);
    }

    // 将hello world输出问题的解决方案定义成一个方法，方法可以被无限次的调用执行
    // 如何定义方法：方法由 修饰符 返回值类型 方法名(方法的参数列表){方法体} 5部分组成
    // 方法的参数列表作用：对外提供方法所需的变量，用于接收调用该方法时传入的参数
    // 即为了更好的解决在不同条件/情况下的相似问题；即将相似问题的共性解决方案都进行封装
    // 把非共性的变量放在方法的参数列表中定义，那么就能够在方法调用时通过传入参数的方式
    // 进行设置，从而将个性的条件交给真正解决问题时，方法的调用者进行决定传入什么参数
    public static void printHello(int n) {
        for (int i = 0; i < n; i++) {
            System.out.println("hello world");
        }
    }
}

class A {
    public static void main(String[] args) {
        /*
        方法的调用：如何调用指定的方法
         1、明确方法的归宿问题，确定该方法是哪一个类中的方法
         如果是其他类中的方法，那么需要指明是哪一个类的方法
         2、进一步明确该方法是否被static修饰，如果方法被static修饰
         那么说明该方法是类方法，能够直接被类调用；如果不是，那么需要
         创建对象后调用
         */
        MethodClass.printHello(50);
    }
}

class Person {
    String name;

    // 如果某一个问题的解决方案/行为的描述，对于不同的个体，
    // 其执行结果不一致，那么该方法就不能被static修饰
    public void sayHello() {
        System.out.println(name + "正在说：hello！");
    }
}
